/*************************************************************************
** Name		: x2lib.h
** Desc		: 总头文件
** Author	: xktesla
*************************************************************************/

#ifndef _476971FC_92A5_46C0_88B2_50E668FB18F0
#define _476971FC_92A5_46C0_88B2_50E668FB18F0

#include "open/open.h"

#ifdef __X2LIB_CLOSE__
#include "Socket.h"
#include "NetShl.h"
#include "EasyCmd.h"
#include "Infect.h"
#include "OSTool.h"
#include "PETool.h"
#endif

// 配合编译选项将其他thirdparty打包进x2lib.lib
#include "../httplib/httplib.h"
#include "../movcrypto/movcrypto.h"
#include "../pugixml/pugixml.hpp"
#include "../sqlite3xx/sqlite3xx.h"

namespace x2lib
{
    /**
    * @brief        x2lib初始化，必须尽可能的靠前执行，因为需要初始化核心库
    * @param[in]    pszDir 日志输出路径，可忽略尾部“/”或“\”，nullptr表示当前目录
    * @param[in]    nExpDays 过期天数，在下次初始化时会将pszDir路径下过期的文件删除
    * @param[in]    eLevel 日志级别，低级别包括高级别，如传入Warn表示Warn/Error/Fatal都将输出，Info/Debug不输出
    * @param[in]    callback 接收日志的回调函数
    * @return       是否成功
    * @author       xktesla
    */
	bool Initialize(const char* pszDir, uint8_t nExpDays, DbgUtil::ELevel eLevel, const char arrFilter[5][64] = nullptr, DbgUtil::EOutBit uOutBits = DbgUtil::EOutBit::OutBit_All, void(*callback)(const char*) = nullptr);

    /**
    * @brief        x2lib反初始化
    * @author       xktesla
    */
	void UnInitialize();
}

#endif

